Perl学习06之一行式操作
"pythonic生物人"的第11篇分享
摘要
Perl一行式使用
目录
2、特殊字符
3、一行式使用实例
4、参考文献
正文开始啦
Perl程序一行命令,可以替代grep+sed+awk;
2、特殊字符
3、一行式使用实例
root x 0 0 root /root /bin/bash
daemon x 1 1 daemon /usr/sbin /usr/sbin/nologin
bin x 2 2 bin /bin /usr/sbin/nologin
sys x 3 3 sys /dev /usr/sbin/nologin
sync x 4 65534 sync /bin /bin/sync
例1:每一行后面加空行
perl -pe '$\="\n"' file.log
#将$\(输出行分隔符)替换为\n,类似awk的ORS,$\默认为空值undef
例2:每一行后加空行,空行除外
perl -pe '$\="\n" unless /^$/' file.log
#unless /^$/跳过空行
perl -pe '$\="\n" if /\s/' file.log
#\s匹配到多个空白符跳过
以上方法类似
例3:连续输出多个相等字符
perl -e 'print "Comeon!\t"x10,"\n";'
#x,表示重复
例4:行前加空行
perl -pe 's/^/\n/g' file.log
#^替换为\n
例5:输出非空行
perl -ne 'print if /\S/' file.log
#匹配到一个空白(\S)就不输出(-n)
perl -ne 'print unless/^$/' file.log
#unless/^$/,匹配到空白就不输出(-n)
perl -lne 'print if length' file.log
#ength($_)为零不输出
例6:移除单词间所有空白
perl -lpe 's/ //g' file.log
#类似于sed -i
例7:每行单词间连续空白压缩为单空格
perl -lpe 's/\s+/ /g' file.log
#s/\s+/ /g 多空白替换为一空白
例8:原地修改拷贝
perl -i".bak" -lpe 's/$/\n/g' file.log
#-i修改文件并复制为file.log.bak
例9:所有行行号
perl -pe '$_ = "$. $_"' file.log
#$.为当前行号
例10:非空行行号递增,全部输出
perl -pe '$_ = ++$x." $_" if /\S/' file.log
#if /\S/ 匹配到非空白行,行号自增并返回(++$x.,$x.中x可以替换为其它字母)
例11:非空行行号递增,只输出非空行
perl -ne 'print ++$x." $_" if /\S/' file.log
#不输出没处理的行,即空白行不输出
例12:#计数单词个数,为每个单词编号
perl -pe 's/(\w+)/"<".++$num.">.$1"/ge' file.log
例13:#计算每行单词个数,每行单独编号
perl -pe '$num=0;s/(\w+)/"<".++$num.">.$1"/ge' file.log
要想学习更多,参考后面连接,感觉AWK sed 比这个perl一行亲民太多,不想在浪费时间学这个perl一行了。
https://www.cnblogs.com/f-ck-need-u/p/10219742.html#直接修改文件